package tech.aistar.corejava.day09;

/**
 * Created by 李雨昂 on 2019/7/25.
 */
public class Student {
    private int id;

    private String sno;

    private int age;

    public Student() {
    }

    public Student(int id, String sno) {
        this.id = id;
        this.sno = sno;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Student{");
        sb.append("id=").append(id);
        sb.append(", sno='").append(sno).append('\'');
        sb.append(", age=").append(age);
        sb.append('}');
        return sb.toString();
    }

    //手动重写equals方法
    @Override
    public boolean equals(Object obj){
        //1.非空性
        if(obj == null){
            return false;
        }
        //2.自反性 - 自己和自己比较
        if(this == obj){
            return true;
        }
        //3.一致性 - 重点 - 到底是根据那个属性来判断
        //不进行类型的判断 - 会java.lang.ClassCastException类型转换失败异常
        if(obj instanceof Student){//防止student对象和一个非student对象进行比较
            Student s = (Student) obj;//父类强制转换子类 - 想调用子类中的getter方法 - obj.getId();
            //需求1 - 只要两个对象的id的值是一样的,那么希望equals比较的结果
            //为true
//            if (this.id == s.getId()){
//                return true;
//            }
            //需求2 - id和sno俩个属性同时一样,才认为是同一个对象
            //注意点:字符串的比较使用equals - java.lang.String类里面也重写了equals方法
            if(this.id == s.getId() && this.sno.equals(s.getSno())){
                return true;
            }
        }
        return false;
    }

    /*@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (id != student.id) return false;
        if (age != student.age) return false;
        return sno != null ? sno.equals(student.sno) : student.sno == null;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (sno != null ? sno.hashCode() : 0);
        result = 31 * result + age;
        return result;
    }*/
}
